﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crosland.Automotriz.Seguridad.DataAccess;
using Crosland.Automotriz.Seguridad.Entity;
using Crosland.Automotriz.Data.Dao;
using Crosland.Automotriz.Seguridad.ControlExeption;
using System.Data.SqlClient;
namespace Crosland.Automotriz.Seguridad.Business
{
    public class clsUsuarioLogic
    {


        clsUsuarioDAO usuarioDAO = new clsUsuarioDAO();

        public List<T_SEG_USUARIO> listarUsuario() {

            return usuarioDAO.listarUsuarios();
        
        }



        public bool insert(T_SEG_USUARIO obj) {

            return usuarioDAO.Insertar(obj);

        
        }

        public bool modificar(T_SEG_USUARIO obj) {
            return usuarioDAO.Modificar(obj);

        
        }

        public bool eliminar(T_SEG_USUARIO obj) {
            return usuarioDAO.Eliminar(obj);

        
        
        
        }


        public bool PA_insertarUsuGrupo(string ID_USUARIO, int ID_GRUPO) {
            return usuarioDAO.PA_insertarUsuGrupo(ID_USUARIO, ID_GRUPO);
        
        
        }


        public bool PA_deleteUsuGrupo(string ID_USUARIO)
        {
            return usuarioDAO.PA_delteUsuGrupo(ID_USUARIO);


        }

        public bool Actualiza_EstadoUsuario(string estado, string id_usuario) {

            return usuarioDAO.Actualiza_EstadoUsuario(estado, id_usuario);
        
        }




    //Encriptado Logic



        public string EncriptacionPassword(string password) {


            return usuarioDAO.EncriptarPassword(password);
        
        }




        public bool DescencriptarPassword(string id_usuario, string des_password)
        {


            return usuarioDAO.DescencriptarPassword(id_usuario,des_password);
            
        }

        public string DesEncriptarUser(string password)
        {

            return usuarioDAO.DesEncriptarUser(password);
        }

        public string EncriptarPasswordUser(string PASWORD)
        {

            return usuarioDAO.EncriptarPasswordUser(PASWORD);
        }

        public List<T_SEG_USUARIO> listarUser(string username){
            try{
            return usuarioDAO.listarUser(username);
             }
            catch (SqlException sqlEx)
            {
                throw new RunException("ERROR EN EL PROCEDIMIENTO listarUser", sqlEx);
            }
            catch (Exception ex) { throw new RunException("ERROR EN LA APLICACION POR FAVOR CONSULTE: ", ex); }
        }

        public string ValidarUsuario(string userName, string password)
        {

            T_SEG_USUARIO usuario = new clsUsuarioLogic().listarUser(userName)[0];

            if (usuario != null)
            {
                if (usuario.IND_ESTADO == "A")
                {
                    if (usuario.ID_TIPO_USUARIO == 6)
                    {
                        if (password == new clsUsuarioLogic().DesEncriptarUser(usuario.DES_PASSWORD))
                        {
                            return "OK";
                        }
                        else
                        {
                            return "seg_pws_incorrecto";
                        }
                    }
                    else
                    {
                        return "seg_user_noexiste";
                    }
                }
                else
                {
                    return "seg_user_noactivo";
                }
            }
            else
            {
                return "seg_user_noexiste";
            }
        }

        public string ValidarUsuarioExterno(string userName, string password)
        {

            T_SEG_USUARIO usuario = new clsUsuarioLogic().listarUser(userName)[0];

            if (usuario != null)
            {
                if (usuario.IND_ESTADO == "A")
                {
                    if (usuario.ID_TIPO_USUARIO == 7)
                    {
                        if (password == new clsUsuarioLogic().DesEncriptarUser(usuario.DES_PASSWORD))
                        {
                            return "OK";
                        }
                        else
                        {
                            return "seg_pws_incorrecto";
                        }
                    }
                    else 
                    {
                        return "seg_user_noexiste";
                    }
                }
                else
                {
                    return "seg_user_noactivo";
                }
            }
            else
            {
                return "seg_user_noexiste";
            }
        }

        public string CambiarPasswordUsuario(string userName, string pwdOld, string pwdNew)
        {
            String mensaje = "";
            try
            {
                
                T_SEG_USUARIO usuario = new clsUsuarioLogic().listarUser(userName)[0];
                
                if (pwdOld == usuarioDAO.DesEncriptarUser(usuario.DES_PASSWORD))
                {
                    usuarioDAO.DescencriptarPassword(usuario.ID_USUARIO, usuarioDAO.EncriptarPasswordUser(pwdNew));
                  
                    mensaje = "C";
                }
                else
                {
                    mensaje = "I";
                }
            }
            catch (Exception)
            {
            }
            return mensaje;
        }


        public string GenerarPass(int LongPassMin, int LongPassMax) {

            return usuarioDAO.GenerarPass(LongPassMin, LongPassMax);

        
        }

        public bool actualizarPassword(string password, string email) {
            return usuarioDAO.actualizarPassword(password,email);
        
        }

        public List<T_SEG_USUARIO> listaEmail(string des_email) {
            try
            {
                return usuarioDAO.listaEmail(des_email);
            }
            catch (Exception ex)
            {
                throw new RunException("Error al listar en la Tabla T_SEG_USUARIO ", ex);
            }
        }

        public List<T_SEG_USUARIO> listarFiltroTipoUsuarios(int idTipoUsuario)
        {
            return usuarioDAO.listarFiltroTipoUsuarios(idTipoUsuario);
        }

        public List<T_SEG_USUARIO> TraerEmail(string idusuario)
        {
            return usuarioDAO.TraerEmail(idusuario);
        }


        public IEnumerable<Object> listaUsuariosEstadosActivosInactivos(string TipoUsuario, string Estado)
        {
            return usuarioDAO.listaUsuariosEstadosActivosInactivos(TipoUsuario, Estado);
        }

        public IEnumerable<Object> ListarUsuariosFacturadores()
        {
            return usuarioDAO.ListarUsuariosFacturadores();
        }


        public bool InsertarT_SEG_USUARIO_OFICINA(string ID_USUARIO, int ID_ORG_VTA, int ID_OFI_VTA)
        {

            return usuarioDAO.InsertarT_SEG_USUARIO_OFICINA(ID_USUARIO, ID_ORG_VTA, ID_OFI_VTA);
        
        }

    }
}
